/*
 * Copyright Hundsun Technologies Inc. All Rights Reserved.
 */

package config

import "fmt"

// ModuleConfig 代表一个模块的配置
type ModuleConfig struct {
	// 模块名称
	ModuleName string `yaml:"moduleName"`
	// 模块类型
	ModuleType string `yaml:"moduleType"`
	// 模块其他配置，由具体模块解析
	Parameters map[string]string `yaml:"parameters"`

	// 下述字段自动填充
	// etcd key
	Key string `yaml:"key"`
	// 模块ID "/<ModuleName>/<InternalIP>:<Port>"
	ModuleID string `yaml:"moduleID"`
	// 模块名称
	TargetHost string `yaml:"targetHost"`
	// 配置版本（时间戳）
	Version int32 `yaml:"version"`
}

// HostModulesConfig 针对某台主机的模块配置
type HostModulesConfig struct {
	//模块配置所属的目标主机IP（内网IP）
	TargetHost string          `yaml:"targetHost"`
	PublicIP   string          `yaml:"publicIP"`
	Modules    []*ModuleConfig `yaml:"modules"`
}

// HostModulesConfigSet 多台主机上的模块配置集合
type HostModulesConfigSet []HostModulesConfig

// Count 获取包含的HostModuleConfigs数量
func (conf *HostModulesConfigSet) Count() int {
	configs := []HostModulesConfig(*conf)
	return len(configs)
}

// Get 根据索引获取HostModuleConfigs，索引从0开始计数
func (conf *HostModulesConfigSet) Get(index int) (*HostModulesConfig, error) {
	configs := []HostModulesConfig(*conf)
	if index < 0 || index >= len(configs) {
		return nil, fmt.Errorf("invalid index %d", index)
	}
	return &configs[index], nil
}
